package basic.courseLearn10.problem;

import org.junit.Test;

//在布隆过滤器中，可以使用int数组来存储url是否在黑名单之中，0表示不在黑名单，1表示在黑名单。
public class BitsArray {
    private int[] bits;


    public void init(int size) {
        bits = new int[(size + 31) / 32];
    }

    /**
     * 设置某个url在黑名单中
     * @param num url的hash值
     * @return
     */
    public int get(int num){
        //1. 获得数组下标
        int index = num / 32;
        //2. 获得数组内的偏移位数
        int offset = num % 32;
        //3. 获得对应位的值
        int temp = 1 << offset;
        //4. 获得对应位的值
        int value = bits[index] & temp;
        //5. 返回值
        return (value == 0)? 0 : 1;
    }

    /**
     * 设置某个url在黑名单中
     * @param num url的hash值
     */
    public void set(int num){
        //1. 获得数组下标
        int index = num / 32;
        //2. 获得数组内的偏移位数
        int offset = num % 32;
        //3. 获得对应位的值
        int temp = 1 << offset;
        //4. 设置对应位的值
        bits[index] |= temp;
    }


    @Test
    public void test(){
        BitsArray bitsArray = new BitsArray();
        bitsArray.init(100);
        System.out.println(bitsArray.get(10));
        bitsArray.set(10);
        System.out.println(bitsArray.get(10));
    }


}
